38253

191 分钟

#C 语言标准库头文件 math.h

这个头文件提供 数学 的相关功能,例如计算指数,对数,三角函数以及近似取整等。

需要链接数学库,例如在 gcc 中需要添加 -lm 链接选项。

#示例

#include <stdio.h> #include <math.h> // 包含数学函数声明 #include <float.h> // 用于获取浮点数特性 int main(void) { // 1. 基本数学运算 printf("sqrt(16.0) = %.2f\n", sqrt(16.0)); // 平方根 printf("pow(2, 5) = %.2f\n", pow(2, 5)); // 幂运算 printf("fabs(-3.14) = %.2f\n", fabs(-3.14)); // 绝对值 // 2. 三角函数(使用弧度制) double angle = 45.0 * M_PI / 180.0; // 将45度转换为弧度 printf("sin(45°) = %.4f\n", sin(angle)); printf("cos(45°) = %.4f\n", cos(angle)); printf("tan(45°) = %.4f\n", tan(angle)); // 3. 指数和对数函数 printf("exp(1.0) = %.4f (e^1)\n", exp(1.0)); printf("log(10.0) = %.4f (自然对数)\n", log(10.0)); printf("log10(100.0) = %.4f (常用对数)\n", log10(100.0)); // 4. 取整函数 printf("ceil(3.2) = %.2f\n", ceil(3.2)); // 向上取整 printf("floor(3.8) = %.2f\n", floor(3.8)); // 向下取整 printf("round(3.5) = %.2f\n", round(3.5)); // 四舍五入 // 5. 其他常用函数 printf("fmod(10.3, 3.0) = %.2f (浮点余数)\n", fmod(10.3, 3.0)); printf("hypot(3, 4) = %.2f (直角三角形斜边)\n", hypot(3, 4)); // 6. 数学常量 printf("M_PI = %.10f (圆周率π)\n", M_PI); printf("M_E = %.10f (自然对数底数e)\n", M_E); return 0; }

运行结果:

user@host:~ $ gcc main.c -lm
user@host:~ $ ./a.out
sqrt(16.0) = 4.00
pow(2, 5) = 32.00
fabs(-3.14) = 3.14
sin(45°) = 0.7071
cos(45°) = 0.7071
tan(45°) = 1.0000
exp(1.0) = 2.7183 (e^1)
log(10.0) = 2.3026 (自然对数)
log10(100.0) = 2.0000 (常用对数)
ceil(3.2) = 4.00
floor(3.8) = 3.00
round(3.5) = 4.00
fmod(10.3, 3.0) = 1.30 (浮点余数)
hypot(3, 4) = 5.00 (直角三角形斜边)
M_PI = 3.1415926536 (圆周率π)
M_E = 2.7182818285 (自然对数底数e)

#类型

类型标准说明
float_tC99至少和 float 宽度一样的,最高效的单精度浮点类型
double_tC99至少和 double 宽度一样的,最高效的双精度浮点类型

#常量

常量标准说明
HUGE_VALFC99表示数值太大而无法被 float 表示
HUGE_VALC89表示数值太大而无法被 double 表示
HUGE_VALLC99表示数值太大而无法被 long double 表示
INFINITYC99表示正无穷大,注意两个 INFINITY 之间可能不相等,应当使用 isinf 判断
NANC99表示不是一个数值(Not A Number),注意两个 NAN 之间永远不相等,应当使用 isnan 判断
FP_FAST_FMAFC99指示是否支持 float 类型的快速乘加操作,即 fmaf 函数
FP_FAST_FMAC99指示是否支持 double 类型的快速乘加操作,即 fma 函数
FP_FAST_FMALC99指示是否支持 long double 类型的快速乘加操作,即 fmal 函数
FP_ILOGB0C99ilogb 函数在参数为 0 时的结果
FP_ILOGBNANC99ilogb 函数在参数为 NAN 时的结果
math_errhandlingC99定义数学函数使用的错误处理机制
MATH_ERRNOC99使用 errno
MATH_ERREXCEPTC99使用 浮点异常
FP_NORMALC99作为 fpclassify 的返回值,表示正规浮点值
FP_SUBNORMALC99作为 fpclassify 的返回值,表示 次正规数
FP_ZEROC99作为 fpclassify 的返回值,表示正零或负零
FP_INFINITEC99作为 fpclassify 的返回值,表示正无穷或负无穷
FP_NANC99作为 fpclassify 的返回值,表示不是一个数值(Not A Number)

#函数

基本函数 标准说明
fabsC89计算 double 类型的绝对值
fabsfC99计算 float 类型的绝对值
fabslC99计算 long double 类型的绝对值
fmodC89double 类型的除法取余,商向 0 取整
fmodfC99float 类型的除法取余,商向 0 取整
fmodlC99long double 类型的除法取余,商向 0 取整
remainderC99double 类型的除法取余,商四舍六入五成双取整
remainderfC99float 类型的除法取余,商四舍六入五成双取整
remainderlC99long double 类型的除法取余,商四舍六入五成双取整
remquoC99double 类型的除法取余,商四舍六入五成双取整,同时返回有效数字的位数
remquofC99float 类型的除法取余,商四舍六入五成双取整,同时返回有效数字的位数
remquolC99long double 类型的除法取余,商四舍六入五成双取整,同时返回有效数字的位数
fmaC99double 类型的快速乘加运算(x * y + z
fmafC99float 类型的快速乘加运算(x * y + z
fmalC99long double 类型的快速乘加运算(x * y + z
fmaxC99double 类型取最大值
fmaxfC99float 类型取最大值
fmaxlC99long double 类型取最大值
fminC99double 类型取最小值
fminfC99float 类型取最小值
fminlC99long double 类型取最小值
fdimC99计算两个 double 值的正差(max(0, x-y)
fdimfC99计算两个 float 值的正差(max(0, x-y)
fdimlC99计算两个 long double 值的正差(max(0, x-y)
nanC99返回一个 double 类型的 NAN
nanfC99返回一个 float 类型的 NAN
nanlC99返回一个 long double 类型的 NAN
指数函数 标准说明
expC89计算自然常数 e 的幂(),类型为 double
expfC99计算自然常数 e 的幂(),类型为 flaot
explC99计算自然常数 e 的幂(),类型为 long double
exp2C99计算 2 的幂(),类型为 double
exp2fC99计算 2 的幂(),类型为 flaot
exp2lC99计算 2 的幂(),类型为 long double
expm1C99计算自然常数 e 的幂减一(),类型为 double
expm1fC99计算自然常数 e 的幂减一(),类型为 flaot
expm1lC99计算自然常数 e 的幂减一(),类型为 long double
logC89计算底为自然常数 e 的对数(),类型为 double
logfC99计算底为自然常数 e 的对数(),类型为 flaot
loglC99计算底为自然常数 e 的对数(),类型为 long double
log10C99计算底为 10 的对数(),类型为 double
log10fC99计算底为 10 的对数(),类型为 flaot
log10lC99计算底为 10 的对数(),类型为 long double
log2C99计算底为 2 的对数(),类型为 double
log2fC99计算底为 2 的对数(),类型为 flaot
log2lC99计算底为 2 的对数(),类型为 long double
log1pC99计算底为自然常数 e,幂为 1 + x 的对数(),类型为 double
log1pfC99计算底为自然常数 e,幂为 1 + x 的对数的对数(),类型为 flaot
log1plC99计算底为自然常数 e,幂为 1 + x 的对数的对数(),类型为 long double
幂函数 标准说明
powC89计算乘方(),类型为 double
powfC99计算乘方(),类型为 flaot
powlC99计算乘方(),类型为 long double
sqrtC89计算平方根(),类型为 double
sqrtfC99计算平方根(),类型为 flaot
sqrtlC99计算平方根(),类型为 long double
cbrtC99计算三次方根(),类型为 double
cbrtfC99计算三次方根(),类型为 flaot
cbrtlC99计算三次方根(),类型为 long double
hypotC99计算平方和的根(),类型为 double
hypotfC99计算平方和的根(),类型为 flaot
hypotlC99计算平方和的根(),类型为 long double
三级函数 标准说明
sinC89计算 double 类型的正弦(
sinfC99计算 float 类型的正弦(
sinlC99计算 long double 类型的正弦(
cosC89计算 double 类型的余弦(
cosfC99计算 float 类型的余弦(
coslC99计算 long double 类型的余弦(
tanC89计算 double 类型的正切(
tanfC99计算 float 类型的正切(
tanlC99计算 long double 类型的正切(
asinC89计算 double 类型的反正弦(
asinfC99计算 float 类型的反正弦(
asinlC99计算 long double 类型的反正弦(
acosC89计算 double 类型的反余弦(
acosfC99计算 float 类型的反余弦(
acoslC99计算 long double 类型的反余弦(
atanC89计算 double 类型的反正切(
atanfC99计算 float 类型的反正切(
atanlC99计算 long double 类型的反正切(
双曲函数 标准说明
sinhC89计算 double 类型的双曲正弦(
sinhfC99计算 float 类型的双曲正弦(
sinhlC99计算 long double 类型的双曲正弦(
coshC89计算 double 类型的双曲余弦(
coshfC99计算 float 类型的双曲余弦(
coshlC99计算 long double 类型的双曲余弦(
tanhC89计算 double 类型的双曲正切(
tanhfC99计算 float 类型的双曲正切(
tanhfC99计算 long double 类型的双曲正切(
asinhC99计算 double 类型的反双曲正弦(
asinhfC99计算 float 类型的反双曲正弦(
asinhlC99计算 long double 类型的反双曲正弦(
acoshC99计算 double 类型的反双曲余弦(
acoshfC99计算 float 类型的反双曲余弦(
acoshlC99计算 long double 类型的反双曲余弦(
atanhC99计算 double 类型的反双曲正切(
atanhfC99计算 float 类型的反双曲正切(
atanhlC99计算 long double 类型的反双曲正切(
误差与 Gamma 函数 标准说明
erfC99计算 double 类型的误差函数
erffC99计算 float 类型的误差函数
erflC99计算 long double 类型的误差函数
erfcC99计算 double 类型的互补误差函数
erfcfC99计算 float 类型的互补误差函数
erfclC99计算 long double 类型的互补误差函数
tgammaC99计算 double 类型的 Gamma 函数
tgammafC99计算 float 类型的 Gamma函数
tgammalC99计算 long double 类型的 Gamma 函数
lgammaC99计算 double 类型 Gamma 函数的自然对数
lgammafC99计算 float 类型 Gamma 函数的自然对数
lgammalC99计算 long double 类型 Gamma 函数的自然对数
近似取整函数 标准说明
ceilC89double 类型向上取整(
ceilfC99float 类型向上取整(
ceillC99long double 类型向上取整(
floorC89double 类型向下取整(
floorfC99float 类型向下取整(
floorlC99long double 类型向下取整(
truncC99double 类型向零取整
truncfC99float 类型向零取整
trunclC99long double 类型向零取整
roundC99double 类型四舍五入取整
roundfC99float 类型四舍五入取整
roundlC99long double 类型四舍五入取整
lroundC99doublelong int 的四舍五入取整
lroundfC99floatlong int 的四舍五入取整
lroundlC99long doublelong int 的四舍五入取整
llroundC99doublelong long int 的四舍五入取整
llroundfC99floatlong long int 的四舍五入取整
llroundlC99long doublelong long int 的四舍五入取整
nearbyintC99double 类型按照 当前舍入模式 取整
nearbyintfC99float 类型按照 当前舍入模式 取整
nearbyintlC99long double 类型按照 当前舍入模式 取整
rintC99double 类型按照 当前舍入模式 取整
rintfC99float 类型按照 当前舍入模式 取整
rintlC99long double 类型按照 当前舍入模式 取整
lrintC99doublelong int 类型按照 当前舍入模式 取整
lrintfC99floatlong int 类型按照 当前舍入模式 取整
lrintlC99long doublelong int 类型按照 当前舍入模式 取整
llrintC99doublelong long int 类型按照 当前舍入模式 取整
llrintfC99floatlong long int 类型按照 当前舍入模式 取整
llrintlC99long doublelong long int 类型按照 当前舍入模式 取整
浮点操作函数 标准说明
frexpC89double 分解为有效数字和 2 的幂
frexpfC99float 分解为有效数字和 2 的幂
frexplC99long double 分解为有效数字和 2 的幂
ldexpC89double 乘以 2 的幂
ldexpfC99float 乘以 2 的幂
ldexplC99long double 乘以 2 的幂
modfC89double 分解为整数部分和小数部分
modffC99float 分解为整数部分和小数部分
modflC99long double 分解为整数部分和小数部分
scalbnC99高效计算 FLT_RADIXint 次幂,结果为 double
scalbnfC99高效计算 FLT_RADIXint 次幂,结果为 float
scalbnlC99高效计算 FLT_RADIXint 次幂,结果为 long double
scalblnC99高效计算 FLT_RADIXlong int 次幂,结果为 double
scalblnfC99高效计算 FLT_RADIXlong int 次幂,结果为 float
scalblnlC99高效计算 FLT_RADIXlong int 次幂,结果为 long double
ilogbC99double 中提取 int 类型的指数
ilogbfC99float 中提取 int 类型的指数
ilogblC99long double 中提取 int 类型的指数
logbC99double 中提取 double 类型的指数
logbfC99float 中提取 float 类型的指数
logblC99long double 中提取 long double 类型的指数
nextafterC99获得 double 类型的下一个可表示的浮点数
nextafterfC99获得 float 类型的下一个可表示的浮点数
nextafterlC99获得 long double 类型的下一个可表示的浮点数
nexttowardC99获得 double 类型的下一个可表示的浮点数
nexttowardfC99获得 float 类型的下一个可表示的浮点数
nexttowardlC99获得 long double 类型的下一个可表示的浮点数
copysignC99拷贝 double 类型的符号位
copysignfC99拷贝 float 类型的符号位
copysignlC99拷贝 long double 类型的符号位
判断函数 标准说明
fpclassifyC99获得浮点数的分类
isfiniteC99判断浮点数是否有一个有限值(NANINFINITY 均不是)
isinfC99判断浮点数是否是无限
isnanC99判断浮点数是否不是数值(Not A Number)
signbitC99判断浮点数是否为负
isgreaterC99判断大于
isgreaterequalC99判断大于等于
islessC99判断小于
islessequalC99判断小于等于
islessgreaterC99判断大于或小于
isunorderedC99判断无序,即至少一个是 NAN

#推荐阅读

创建于 2025/6/13

更新于 2025/6/30